﻿using System;
using System.Data;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
//using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Dzzzr;
using Image=System.Drawing.Image;

namespace NWS
{
	public class PhotoHandler : IHttpHandler
	{
		public PhotoHandler()
		{
		}
		/// <summary>
		/// Реализуем свойство IsReusable, указывающее на то, может ли наш класс вызываться без повторной инициализации
		/// </summary>
		bool IHttpHandler.IsReusable
		{
			get { return true; }
		}
		void IHttpHandler.ProcessRequest(HttpContext context)
		{

			//Получаем ссылки на объекты Request и Response запроса.
			HttpRequest Request = context.Request;
			HttpResponse Response = context.Response;

			byte[] image = GetImage(Int32.Parse(Request.QueryString["ID"]));
			//Устанавливаем правильный ContentType
			Response.ContentType = "image/jpeg";

			//И пишем содержимое картинки клиенту.
			Response.OutputStream.Write(image, 0, image.Length);
			Response.End();
		}

		private byte[] GetImage(int id)
		{
		  float emSize = 9;
			//Получаем картинку по ее уникальному идентификатору
      Stream image = GetEmptyImage();
		  Entity entity = Entity.GetEntityByID(id);
		  string caption = entity.Name.Substring(0, entity.Name.Length > 2 ? 2 : entity.Name.Length);
      Bitmap bmp = new Bitmap(image);
      //Bitmap bmp1 = bmp.Clone(new Rectangle(0, 0, bmp.Size.Width, bmp.Size.Height), PixelFormat.Format24bppRgb);

		  int add = 15;
      
      StringFormat sf = new StringFormat();
      sf.Alignment = StringAlignment.Near;
		  Font font = new Font("Arial", emSize,FontStyle.Bold);
       
      //SizeF stringSize = g.MeasureString(caption, font ,bmp.Width,sf);
      Image img = new Bitmap(bmp.Width, bmp.Height + add);
      using (Graphics g = Graphics.FromImage(img))
      {
        g.DrawImage(bmp, 0, add);
        g.DrawString(caption, font, Brushes.Black, 0, 0);
  	  }
      MemoryStream ms = new MemoryStream();
      img.Save(ms, ImageFormat.Png);
      return ms.ToArray();
		}

		private static Stream GetEmptyImage()
		{
			string imagePath = HttpContext.Current.Server.MapPath("Images//marker.png");
		  Stream filesStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
      return filesStream;//File.ReadAllBytes(imagePath);
		}
	}
}
